home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / xp.h.z / xp.h
C/C++ Source or Header  |  1992-04-03  |  14KB  |  427 lines

  1. #ifndef __SYS_XP_H__
  2. #define __SYS_XP_H__
  3.  
  4. /**************************************************************************
  5.  *                                      *
  6.  *          Copyright (C) 1989, Silicon Graphics, Inc.          *
  7.  *                                      *
  8.  *  These coded instructions, statements, and computer programs  contain  *
  9.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  10.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  11.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  12.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  13.  *                                      *
  14.  **************************************************************************/
  15. #ident "$Revision: 1.11 $"
  16.  
  17. /******************************************************************************
  18. FILE = %W%     %G%     Xylogics Inc.
  19. *******************************************************************************
  20. DEFINE: misc_defs.h - miscellaneous definitions.
  21. *******************************************************************************
  22. DESCRIPTION:
  23.          This file defines miscellaneous constants for code compatability
  24.     and readability.
  25.  
  26. *******************************************************************************
  27. EDIT HISTORY:
  28.     1.1  08JAN89    CLD    Initial Release.
  29.  
  30. *******************************************************************************
  31. COMMENTS:
  32.     None.
  33. ******************************************************************************/
  34.  
  35. typedef  unsigned char      BOOL, UCHAR, BYTE; /* 8 Bits unsigned.  */
  36. typedef  unsigned short   USHORT;            /* 16 Bits unsigned. */
  37. typedef  short         SHORT;             /* 16 Bits unsigned. */
  38. typedef  unsigned int     UINT;              /* System dependent. */
  39. typedef  int           INT;               /* System dependent. */
  40. typedef  unsigned long    ULONG;             /* 32 Bits Unsigned. */
  41. typedef  long          LONG;              /* 32 Bits Unsigned. */
  42.  
  43. #define  EXTERN           extern
  44. #define  GLOBAL           extern
  45. #define  LOCAL            static
  46.  
  47. /* Bit Mask Definitions. */
  48.  
  49. #define BIT0       0x01
  50. #define BIT1       0x02
  51. #define BIT2       0x04
  52. #define BIT3       0x08
  53. #define BIT4       0x10
  54. #define BIT5       0x20
  55. #define BIT6       0x40
  56. #define BIT7       0x80
  57.  
  58. /* Boolean Definitions. */
  59.  
  60. #define BAD           0 
  61. #define CLEAR         0
  62. #define FAILURE       0
  63. #define UNSUCCESSFULL 0
  64. #ifndef FALSE
  65. #define FALSE         0
  66. #endif
  67. #define IDLE          0
  68.  
  69. #define GOOD          1
  70. #define SET           1
  71. #define SUCCESS       1
  72. #define SUCCESSFULL   1
  73. #ifndef TRUE
  74. #define TRUE          1
  75. #endif
  76. #define PENDING       1
  77.  
  78.  
  79. /******************************************************************************
  80. FILE = %W%     %G%     Xylogics Inc.
  81. *******************************************************************************
  82. DEFINE: constants.h - constant definitions. 
  83. *******************************************************************************
  84. DESCRIPTION:
  85.          This file defines the constants used by the driver.  It includes
  86.     the bit masks for the controller register.
  87.  
  88. *******************************************************************************
  89. EDIT HISTORY:
  90.     1.1  08JAN89    CLD    Initial Release.
  91.  
  92. *******************************************************************************
  93. COMMENTS:
  94.     None.
  95. ******************************************************************************/
  96.  
  97. /*
  98.  *  Bit positions in the Control/Status register.
  99.  */
  100.  
  101. /* These are the write-only bit positions: */
  102.  
  103. #define    MRST    BIT6        /* Module Reset.               */
  104. #define EMM    BIT5        /* Enter Maintenance Mode.     */
  105. #define ARC    BIT2        /* Add Register Control.       */
  106. #define CRS    BIT1        /* Clear Register Status.      */
  107.  
  108. /* These are the read-only bit positions: */
  109.  
  110. #define RSTA    BIT6        /* Module Reset Active.          */
  111. #define MMA    BIT4        /* Maintenance Mode Active.      */
  112. #define ARCP    BIT2        /* Add Register Control Pending. */
  113. #define RSP    BIT1        /* Register Status Pending.      */
  114. #define FERR    BIT0        /* Fatal Error.                  */
  115.  
  116. /* These define the lower nibble of the Command/Report register: */
  117.  
  118. #define    SYNC    BIT2        /* Synchronous active/complete.  */
  119. #define WRITE    BIT1        /* Write active/complete.        */
  120. #define READ    BIT0        /* Read active/complete.         */
  121.  
  122. /*
  123.  *  These define the upper nibble of the Command/Report register.
  124.  *  The command code definitions are:
  125.  */
  126.  
  127. #define OCTART_INIT    0x10    /* OCTART initialization.        */
  128. #define FLUSH_BUF    0x20    /* Flush the buffers.            */ 
  129. #define RESET_PORT    0x30    /* Reset port.                   */
  130. #define SET_MODEM    0x40    /* Set modem control signals.    */
  131. #define GET_MODEM    0x50    /* Report modem control signals. */
  132. #define SEND_BREAK    0x60    /* Send break.                   */
  133. #define GET_ERROR    0x70    /* Report error log.             */
  134. #define GET_CPARMS    0x80    /* Get controller parameters.    */ 
  135. #define HXON        0x90    /* Host XON.                     */
  136. #define HXOFF        0xA0    /* Host XOFF.                    */
  137.  
  138. /*
  139.  *  Controller Status Codes.
  140.  */
  141.  
  142. #define PARITY_ERR    0x10    /* Parity error.                 */
  143. #define FRAME_ERR    0x20    /* Frame error/break.            */
  144. #define MODEM_CHG    0x30    /* Modem change.                 */
  145. #define IN_OVRN        0x40    /* Input overrun.                */
  146. #define CMD_ERR        0x50    /* Command error.                */
  147. #define BUS_ERR        0x60    /* Data access bus error.        */
  148. #define TMO_ERR        0x70    /* Data access timeout error.    */
  149. #define OCT_OVF        0x80    /* OCTART overflow.              */
  150.  
  151. /*
  152.  *  Controller Table status field definitions:
  153.  */
  154.  
  155. #define    NOT_INIT    0x00    /* Not initialized.              */
  156. #define INITIALIZED    BIT0    /* Initialized.                  */
  157.  
  158. /* 
  159.  *  Controller Table hardware configuration register definitions:
  160.  */
  161.  
  162. #define HIGHSPEED    BIT0    /* High speed crystal setting mask. */
  163.  
  164. /*
  165.  *  OCTART Parameters:  scc operating characteristics.
  166.  */
  167.  
  168. #define    STOP_1BIT    BIT6    /* 1 Stop bit.                   */
  169. #define STOP_15BIT    BIT7    /* 1.5 Stop bits.                */
  170. #define STOP_2BIT    (BIT6 | BIT7)    /* 2 Stop bits.                  */
  171.  
  172. #define NO_PARITY    0x00    /* No parity.                    */
  173. #define ODD_PARITY    BIT4    /* Odd parity.                   */
  174. #define EVEN_PARITY    (BIT4 | BIT5)    /* Even parity.                  */
  175.  
  176. #define    BPC5        0x00    /* 5 Bits per character.         */
  177. #define BPC6        BIT2    /* 6 Bits per character.         */
  178. #define BPC7        BIT3    /* 7 Bits per character.         */
  179. #define BPC8        (BIT2 | BIT3)    /* 8 Bits per character.         */
  180.  
  181. #define NO_FLWCTL    0x00    /* No flow control.              */
  182. #define HDW_FLWCTL    BIT0    /* Hardware(using RTS/CTS lines).*/
  183. #define SFT_FLWCTL    BIT1    /* Software(using XON, XOFF).    */
  184. #define ALL_FLWCTL    (BIT0 | BIT1)    /* Hardware and Software control.*/
  185.  
  186. /* Baud rates:  */
  187.  
  188. #define    BAUD_50        0x00    /* 50/100 Baud rate.             */
  189. #define BAUD_75        0x01    /* 75/150 Baud rate.             */
  190. #define BAUD_110    0x02    /* 110/220 Baud rate.            */
  191. #define BAUD_134.5    0x03    /* 134.5/269 Baud rate.          */
  192. #define BAUD_150    0x04    /* 150/300 Baud rate.            */
  193. #define BAUD_300    0x05    /* 300/600 Baud rate.            */
  194. #define BAUD_600    0x06    /* 600/1200 Baud rate.           */
  195. #define BAUD_1200    0x07    /* 1200/2400 Baud rate.          */
  196. #define BAUD_1800    0x08    /* 1800/3600 Baud rate.          */
  197. #define BAUD_2000    0x09    /* 2000/4000 Baud rate.          */
  198. #define BAUD_2400    0x0a    /* 2400/4800 Baud rate.          */
  199. #define BAUD_3600    0x0b    /* 3600/7200 Baud rate.          */
  200. #define BAUD_4800    0x0c    /* 4800/9600 Baud rate.          */
  201. #define BAUD_7200    0x0d    /* 7200/14400 Baud rate.         */
  202. #define BAUD_9600    0x0e    /* 9600/19200 Baud rate.         */
  203. #define BAUD_19200    0x0f    /* 19200/38400 Baud rate.        */
  204.  
  205. /* Modem line signals:  */
  206.  
  207. #define    MDM_RTS        BIT0    /* Modem RTS.                    */
  208. #define MDM_DTR        BIT1    /* Modem DTR.                    */
  209. #define MDM_DCD        BIT5    /* Modem DCD.                    */
  210. #define MDM_CTS        BIT6    /* Modem CTS.                    */
  211. #define MDM_DSR        BIT7    /* Modem DSR.                    */
  212.  
  213. /* Modem state masks:   */
  214.  
  215. #define MDM_ENBL    BIT0    /* Port enable.                  */
  216. #define MDM_MCU        BIT1    /* Modem change update.          */
  217.  
  218. /* Port Information Table field p_status bit definitions: */
  219.  
  220. #define DOING_TCSBRK    BIT0    /* Doing ioctl TCSBRK.           */
  221. #define DOING_TCSETAW    BIT1    /* Doing ioctl TCSETAW/TCSETAF.  */
  222. #define DOING_TCSETAF    BIT2    /* Doing ioctl TCSETAW/TCSETAF.  */
  223. #define    CLOSING_PORT    BIT3    /* Closing the port.             */
  224. #define BLOCK_INPUT    BIT4    /* Block input data.         */
  225. #define B_FULL        BIT5    /* Output buffer full.           */
  226. #define CLOSE_PENDING   BIT6    /* Close requested on this port. */
  227. #define OPENING_PORT    BIT7    /* Opening a port.               */
  228. #define TIMEOUT_PND    0x100    /* Timeout pending waiting for DCD.*/
  229. #define HANGUP        0x200   /* We have started a hangup.     */
  230. #define MODEMPORT    0x400    /* This port is a modem.         */
  231. #define MODEMFLOW    0x800   /* Modem port with hardware flow.*/
  232. #define STOP_INPUT    0x1000  /* Driver flow control flag.     */
  233.  
  234. /******************************************************************************
  235. FILE = %W%     %G%     Xylogics Inc.
  236. *******************************************************************************
  237. DEFINE: extern.h - external definitions. 
  238. *******************************************************************************
  239. DESCRIPTION:
  240.          This file defines the variables used by the driver that
  241.      are declared by the kernel.
  242.  
  243. *******************************************************************************
  244. EDIT HISTORY:
  245.     1.1  08JAN89    CLD    Initial Release.
  246.  
  247. *******************************************************************************
  248. COMMENTS:
  249.     None.
  250. ******************************************************************************/
  251.  
  252. int xp_edtinit(), xp_open(), xp_close();
  253.  
  254. /******************************************************************************
  255. FILE = %W%     %G%     Xylogics Inc.
  256. *******************************************************************************
  257. DEFINE: macros.h - driver defined macros. 
  258. *******************************************************************************
  259. DESCRIPTION:
  260.          This file defines the macros used by the driver.
  261.  
  262. *******************************************************************************
  263. EDIT HISTORY:
  264.     1.1  08JAN89    CLD    Initial Release.
  265.  
  266. *******************************************************************************
  267. COMMENTS:
  268.     None.
  269. ******************************************************************************/
  270.  
  271. /*             CTLR()
  272.  *
  273.  * This macro returns the controller number to which a minor device
  274.  * number is attached.  The system macro minor() is used to mask off
  275.  * the major device number.
  276.  */
  277.  
  278. #define CTLR(dev)    ((minor(dev) & (NUMMINOR - 1)) / NPORT)
  279.  
  280.  
  281. /*                       PORT()
  282.  *
  283.  * This macro is used to calculate the logical port number for a device.
  284.  * The system macro minor() is used to mask off the major device number.
  285.  */
  286.  
  287. #define PORT(dev)    ((minor(dev) & (NUMMINOR - 1)) % NPORT)
  288.  
  289. /*
  290.  *            MODEM()
  291.  *
  292.  * This macro is used to determine if a device number indicates
  293.  * a modem.
  294.  */
  295.  
  296. #define MODEM(dev)    (((dev) & ~(NUMMINOR - 1)) & 0x0ff)
  297.  
  298. /*
  299.  *            FLOW_MODEM()
  300.  *
  301.  * This macro is used to determine if a device number indicates
  302.  * hardware flow control for the modem. 
  303.  */
  304.  
  305. #define FLOW_MODEM(dev)    (((dev) & ~((NUMMINOR * 2) - 1)) & 0xff) 
  306.  
  307. #define OUTPUT_MOD (MAX_OBUF - 1)
  308.  
  309. #define OBUF_EMPTY(ptr) \
  310.      (((ptr->put + sizeof(char)) & OUTPUT_MOD) == ptr->get)
  311. #define OBUF_FULL(ptr) \
  312.      ((ptr->put + (sizeof(char) * 2) & OUTPUT_MOD) == ptr->get)
  313.  
  314. #define OBUF_PUT_LOC(ptr)    ( &(ptr->data[(ptr->put + 1) & OUTPUT_MOD]) )
  315.  
  316. #define OBUF_ADD(ptr, cnt, empty)                    \
  317.     do {                                \
  318.     USHORT    temp;                            \
  319.         temp = ptr->put;                        \
  320.         ptr->put = ((ptr->put + (sizeof (char) * cnt)) & OUTPUT_MOD) ; \
  321.         if (ptr->get == ((temp+1) & OUTPUT_MOD))        \
  322.         empty = TRUE;                        \
  323.     } while (0)
  324.  
  325. #define OBUF_CONTIG(ptr) \
  326.     ((((ptr->put + 1) & OUTPUT_MOD) <= ((ptr->get - 1) & OUTPUT_MOD)) \
  327.                     || (ptr->get == 0)    \
  328.     ?    \
  329.         ((ptr->get - ptr->put - 2) & OUTPUT_MOD) : (OUTPUT_MOD - ptr->put))
  330.  
  331.  
  332.  
  333.  
  334.  
  335. /*
  336.  *            QTODEV()
  337.  *
  338.  * This macro searches Xp_pinfo[][].p_rdq to determine the device
  339.  * number associated with a particular read queue address.
  340.  * It returns the controller number and the port number.
  341.  */
  342.  
  343. #define QTODEV(rq,ctlr,port)                    \
  344.     {                            \
  345.     INT    dev;                        \
  346.     PINFO    *pinfo_ptr;                    \
  347.     BOOL    not_found;                    \
  348.     dev = 0;                        \
  349.     not_found = TRUE;                    \
  350.     pinfo_ptr = &Xp_pinfo[0][0];                \
  351.     while ((dev < (NPORT * NCONTROLLER)) && (not_found))    \
  352.             {                        \
  353.             if (pinfo_ptr->p_rdq == rq)            \
  354.                 not_found = FALSE;            \
  355.             else                        \
  356.                 {                    \
  357.                 pinfo_ptr++;                \
  358.                 dev++;                    \
  359.                 }                    \
  360.             }                        \
  361.     port = PORT(dev);                    \
  362.     ctlr = CTLR(dev);                    \
  363.         }
  364.  
  365. /*
  366.  *            WAITARCP()
  367.  *
  368.  * This macro checks and waits for ARCP to clear in the corresponding
  369.  * controller register.  If it does not clear within the time expected,
  370.  * arcpclr is cleared to FALSE.
  371.  */
  372.  
  373. #define WAITARCP(regs, orig_prio, arcpclr)    \
  374.     {                    \
  375.     INT    counter = 255;            \
  376.                         \
  377.     while ((regs->csr & ARCP) && (arcpclr))    \
  378.         {                    \
  379.             splx(orig_prio);            \
  380.         counter--;                \
  381.         if (counter)            \
  382.         {                \
  383.             orig_prio = spltty();        \
  384.         DELAY(100);            \
  385.         }                \
  386.         else                \
  387.         {    \
  388.         arcpclr = FALSE;        \
  389.             orig_prio = spltty();        \
  390.         }    \
  391.         }                    \
  392.     }
  393.  
  394. /*
  395.  *            INIT_UART()
  396.  *
  397.  * This macro sets up the uart parameters for a port with the default
  398.  * values.
  399.  */
  400.  
  401. #define INIT_UART(uart_ptr, cinfo)    \
  402.     uart_ptr->u_scc =             \
  403.     (USHORT)(SFT_FLWCTL | BPC8 | NO_PARITY | STOP_1BIT);  \
  404.     if (cinfo->c_crystal & HIGHSPEED)    \
  405.         uart_ptr->u_baud = 0xcc;     \
  406.     else                \
  407.         uart_ptr->u_baud = 0xee;     \
  408.     uart_ptr->u_mdm_mask = MDM_MCU;    \
  409.     uart_ptr->u_in_time = 20;        \
  410.     uart_ptr->u_in_min = MAX_IBUF - 2;    \
  411.     uart_ptr->u_xon = 0x11;        \
  412.     uart_ptr->u_xoff = 0x13;        \
  413.     uart_ptr->u_lowtide = (MAX_OBUF - (MAX_OBUF / 2));     \
  414.     uart_ptr->u_breaktime = 5;        \
  415.     uart_ptr->u_parerr = CLEAR;     \
  416.     uart_ptr->u_framerr = CLEAR;    \
  417.     uart_ptr->u_ovferr = CLEAR;    
  418.  
  419. /*
  420.  *            SWINSIZE()
  421.  *
  422.  * This macro sets the window size for a port. 
  423.  */
  424. #define SWINSIZE(mp)    ((struct winsize *)(mp)->b_cont->b_rptr)
  425.  
  426. #endif /* __SYS_XP_H__ */
  427.